//
//  UMSocialSnsPlatformManager.h
//  SocialSDK
//
//  Created by yeahugo on 13-1-15.
//  Copyright (c) 2013年 Umeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "UMSocialControllerService.h"

/**
新浪微博
*/
extern NSString *const UMShareToSina;

/**
腾讯微博
*/
extern NSString *const UMShareToTencent;

/**
人人网
*/
extern NSString *const UMShareToRenren;

/**
豆瓣
*/
extern NSString *const UMShareToDouban;

/**
QQ空间
*/
extern NSString *const UMShareToQzone;

/**
邮箱
*/
extern NSString *const UMShareToEmail;

/**
短信
*/
extern NSString *const UMShareToSms;

/**
微信好友
*/
extern NSString *const UMShareToWechatSession;

/**
微信朋友圈
*/
extern NSString *const UMShareToWechatTimeline;

/**
微信收藏
*/
extern NSString *const UMShareToWechatFavorite;

/**
手机QQ
*/
extern NSString *const UMShareToQQ;

/**
Facebook
*/
extern NSString *const UMShareToFacebook;

/**
Twitter
*/
extern NSString *const UMShareToTwitter;

/**
易信好友
*/
extern NSString *const UMShareToYXSession;

/**
易信朋友圈
*/
extern NSString *const UMShareToYXTimeline;

/**
来往好友
*/
extern NSString *const UMShareToLWSession;

/**
来往朋友圈
*/
extern NSString *const UMShareToLWTimeline;

/**
分享到Instragram
*/
extern NSString *const UMShareToInstagram;

/**
分享到Whatsapp
*/
extern NSString *const UMShareToWhatsapp;

/**
分享到Line
*/
extern NSString *const UMShareToLine;

/**
分享到Tumblr
*/
extern NSString *const UMShareToTumblr;

/**
分享到Pinterest
*/
extern NSString *const UMShareToPinterest;

/**
分享到KakaoTalk
*/
extern NSString *const UMShareToKakaoTalk;

/**
分享到Flickr
*/
extern NSString *const UMShareToFlickr;

/**
分享平台

*/
typedef enum
{
    UMSocialSnsTypeNone = 0, UMSocialSnsTypeQzone = 10, UMSocialSnsTypeSina,                  //sina weibo
    UMSocialSnsTypeTenc,                  //tencent weibo
    UMSocialSnsTypeRenr,                  //renren
    UMSocialSnsTypeDouban,                //douban
    UMSocialSnsTypeWechatSession, UMSocialSnsTypeWechatTimeline, UMSocialSnsTypeWechatFavorite, UMSocialSnsTypeEmail, UMSocialSnsTypeSms, UMSocialSnsTypeMobileQQ, UMSocialSnsTypeFacebook, UMSocialSnsTypeTwitter, UMSocialSnsTypeYiXinSession, UMSocialSnsTypeYiXinTimeline, UMSocialSnsTypeLaiWangSession, UMSocialSnsTypeLaiWangTimeline, UMSocialSnsTypeInstagram, UMSocialSnsTypeWhatsApp, UMSocialSnsTypeLine, UMSocialSnsTypeTumblr, UMSocialSnsTypeKakaoTalk, UMSocialSnsTypeFlickr, UMSocialSnsTypePinterest, UMSocialSnsTypeNew
}               UMSocialSnsType;

@class UMSocialControllerService;

/** 定义响应点击平台后的block对象

@param presentingController 点击后弹出的分享页面或者授权页面所在的UIViewController对象
@param socialControllerService 可以用此对象的socialControllerService.socialData可以获取分享内嵌文字、内嵌图片，分享次数等
@param isPresentInController 如果YES代表弹出(present)到当前UIViewController，否则push到UIViewController的navigationController

*/
typedef void (^UMSocialSnsPlatformClickHandler)(UIViewController *presentingController, UMSocialControllerService *socialControllerService, BOOL isPresentInController);

/** 定义响应点击各平台授权登录后的block对象

@param presentingController 点击后弹出的分享页面或者授权页面所在的UIViewController对象
@param socialControllerService 可以用此对象的socialControllerService.socialData可以获取分享内嵌文字、内嵌图片，分享次数等
@param isPresentInController 如果YES代表弹出(present)到当前UIViewController，否则push到UIViewController的navigationController
@param completion 授权完成之后的回调对象，返回的response参数表示成功与否和拿到的授权信息

*/
typedef void (^UMSocialSnsPlatformLoginHandler)(UIViewController *presentingController, UMSocialControllerService *socialControllerService, BOOL isPresentInController, UMSocialDataServiceCompletion completion);

/**
Sns平台类，用`platformName`作为标识，指定显示名称、显示的图片，点击之后的响应。
*/
@interface UMSocialSnsPlatform : NSObject

///---------------------------------------
/// @name 平台属性
///---------------------------------------

/**
平台标示符
*/
@property(nonatomic, copy) NSString *platformName;

/**
显示名称
*/
@property(nonatomic, copy) NSString *displayName;

/**
登录名称
*/
@property(nonatomic, copy) NSString *loginName;

/**
分享类型
*/
@property(nonatomic, assign) UMSocialSnsType shareToType;

/**
大图片的文件名,用于`UMSocialIconActionSheet`
*/
@property(nonatomic, copy) NSString *bigImageName;

/**
小图片的文件名，用于分享列表、登录、个人中心、评论编辑页面等
*/
@property(nonatomic, copy) NSString *smallImageName;

/**
无色的小图片文件名，用于评论编辑页面显示没有授权状态
*/
@property(nonatomic, copy) NSString *smallImageOffName;

/**
处理点击分享事件后的block对象
*/
@property(nonatomic, copy) UMSocialSnsPlatformClickHandler snsClickHandler;

/**
处理点击登录事件后的block对象
*/
@property(nonatomic, copy) UMSocialSnsPlatformLoginHandler loginClickHandler;

/**
是否需要登录授权
*/
@property(nonatomic, assign) BOOL needLogin;

/**
标志是否有webView授权
*/
@property(nonatomic, assign) BOOL haveWebViewAuth;

/**
初始化方法

@param platformName 作为该对象标识的平台名
*/
- (id)initWithPlatformName:(NSString *)platformName;
@end

/*
 Sns平台类管理者类
 */
@interface UMSocialSnsPlatformManager : NSObject

/**
sns平台配置数组，此数组由allSnsArray转换，只包含平台名作为元素
*/
@property(nonatomic, readonly) NSArray *allSnsValuesArray;

/**
该NSDictionary以各个平台名为key，UMSocialPlatform对象为value
*/
@property(nonatomic, retain) NSDictionary *allSnsPlatformDictionary;

/**
`UMSocialSnsPlatformManager`的单例方法

@return `UMSocialSnsPlatformManager`的单例对象
*/
+ (UMSocialSnsPlatformManager *)sharedInstance;

/**
根据平台名，返回平台对象

@param platformName sns平台名

@return UMSocialSnsPlatform 平台对象
*/
+ (UMSocialSnsPlatform *)getSocialPlatformWithName:(NSString *)snsName;

/**
根据平台枚举变量，返回平台对象

@param UMSocialSnsType sns平台枚举变量

@return NSString 平台名
*/
+ (NSString *)getSnsPlatformString:(UMSocialSnsType)socialSnsType;

/**
把配置平台的次序号转换成平台名

@param snsIndex 使用的平台顺序，使用的平台配置在UMSocialConfigDelegate,例如`- (NSArray *)shareToPlatforms;`返回的是UMSocialSnsTypeSina和UMSocialSnsTypeTenc,UMSocialSnsTypeSina就是0，UMSocialSnsTypeTenc就是1

@return 平台名字符串
*/
+ (NSString *)getSnsPlatformStringFromIndex:(NSInteger)snsIndex;

@end
